iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
DevOps

今天不學遺傳學,跟著Kubernetes種豌豆系列 第 20

Day20. 趨於複雜的Service,Ingress單一入口網出場

  • 分享至 

  • xImage
  •  

👻 Service(OSI L4)為application提供外部訪問的方式,類型有ClusterIP、NodePort及LoadBalancer等,或更進一步映射成DNS名稱訪問(type: externalName),可處理到簡單的訪問情境,但隨著服務規模複雜度上升,每個訪問都需直接對應單個service,會趨於複雜,這時可以利用Ingress(OSI L7),進一步根據URL路徑、主機名稱等,做路由轉導

https://ithelp.ithome.com.tw/upload/images/20240824/20168178b4V1gugxpy.png

Ingress是管理外部(http, https) ~ 叢集內各個Service的單一窗口,提供負載平衡、SSL及域名

  • ingress在叢集內,需要設定service對外開放,類別為Type或LoadBalancer
  • 設定包含兩部分
    • ingress controller: 根據ingress resource執行轉導,叢集無內建,需透過外部方案進行配置,像是AWS(K8s支援)、GCE(K8s支援)、Nginx(K8s支援)、Contour、HAPROXY、trafik、Istio
    • ingress resource: 規則及配置,需搭配ingress controller才能使用

1. ingress controller

  • Deployment: 將其部署為單Pod
  • Service: 對外開放
  • ConfigMap: 管理配置資訊,這樣未來調整設定時就不會動到部署本身,使用時傳入ingress controller
  • SeriviceAccount: 提供必要的權限,包含Role、ClusterRoles、Rolebindings

2. ingress resource
pathType

  • Exact: 大小寫及路徑須完全相符
  • Prefix: 大小寫須完全相符,符合路徑前綴即可 /xxx,像是/xxx/ooo 可以,而/xxxooo不符合

取自K8s官網圖片: 根據url傳入不同的application
https://ithelp.ithome.com.tw/upload/images/20240824/201681783R91K8iQ9M.png

metadata:
  name: ingress-multiple-rule
spec:
  rules:
  - http:
      paths:
      - pathType: Exact
        path: /profile
        backend: # 對應的service
          serviceName: profile-service
          servicePort: 80
      
      - pathType: Prefix
        path: /post
        backend:
          serviceName: post-service
          servicePort: 80    

取自K8s官網圖片: 根據domain name決定傳入哪個application
https://ithelp.ithome.com.tw/upload/images/20240824/201681783PzRVocPOp.png

metadata:
  name: ingress-multiple-rule
spec:
  rules:
  - host: profile.ithome-thirty-days.com
    http:
      paths:
      - backend:
          serviceName: profile-service
          servicePort: 80
  - host: post.ithome-thirty-days.com
    http:
      paths:
      - backend:
          serviceName: post-service
          servicePort: 80  

ingress操作指令

kubectl get ingress <name>
kubectl describe ingress <name>
kubectl create ingress <ingress-name> --rule="host/path=service:port

上一篇
Day19. 叢集內的網路
下一篇
Day21. 叢集版本更新
系列文
今天不學遺傳學,跟著Kubernetes種豌豆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言